------------------------------------------------ | BC-FORTRAN77 Vers.1.3b | | Copyright: Andre Koestli | | 1990 Martin-Luther-Str.63 | | D7000 Stuttgart 50 | |----------------------------------------------| |----------------------------------------------| | Die Version "b" von BC-FORTRAN77, bestehend | | aus den nachfolgend beschriebenen 5 Dateien, | | ist vollstaendig von mir programmiert. Ich | | gestatte freies Nutzungsrecht an Vers.b fuer | | nichtkommerzielle Anwendungen, alle Rechte | | bleiben jedoch bei mir, insbesondere ist der | | Verkauf der Vers.b, auch im Zusammenhang mit | | anderen Produkten, nicht erlaubt. Jeder Ko- | | pie ist dieser Text unveraendert beizufuegen.| | Die Anwendung fuer militaerische Zwecke oder | | entsprechende Forschung ist verboten! | | Juli 1990 A.Koestli | ------------------------------------------------ BC-FORTRAN77 Version.b besteht aus Compiler, Linker, Modulbibliothek und einem residenten Laufzeitsystem, das u.a. einen einfachen Debugger enthaelt. Diese Version laeuft auf einem MS-DOS Rechner mit 640kB RAM. Eine Festplatte ist nicht erforderlich. Hiermit soll in einfacher Weise ein Compiler fuer Programmierkurse zur Verfuegung stehen. Dem kommt entgegen, dass entsprechende Compiler fuer ATARI ST und AMIGA existieren. Anfragen nach Zusendung einer anderen oder neueren Version werde ich nur noch beantworten, wenn DM 20.- (Schein oder Scheck) Aufwandsentschaedigung (Diskette, Umschlag, Porto und Zeit) beigefuegt sind. Ich versende ausschliesslich 3 1/2 Zoll Disketten. BC-FORTRAN77 Vers.b besteht aus folgenden Dateien: LIES.TXT Dieser Text BCF.EXE Compiler BCL.EXE Linker BCRTSY.EXE Residentes Laufzeitsystem. LIB.B Bibliothek mit Standardfunktionen Wird eine Kopie angefertigt, muessen immer alle Dateien unveraendert uebernommen werden. Installation. ------------- BEVOR Compiler, Linker oder ein damit erzeugtes Programm gestartet wird, MUSS das residente Laufzeitsystem geladen sein. Dazu startet man das Programm BCRTSY.EXE. Soll BC-FORTRAN77 regelmaessig verwendet werden, so empfiehlt es sich, BCRTSY.EXE im AUTOEXEC.BAT zu starten. Die *.EXE Dateien werden in eine Directory kopiert, die im PATH enthalten ist, die Datei LIB.B gehoert in eine APPEND Directory (siehe die MS-DOS Befehle PATH und APPEND). Compiler -------- Der Compiler wird gestartet mit BCF [-Option...] Datei... Enthaelt Datei keinen Punkt, so wird .F angehaengt. Die uebersetzte Form der Programme wird in Datei.B abgelegt. Beispiel: BCF -D TEST.F Uebersetzt TEST.F mit Debug-Option nach TEST.B BCF TEST SUB Uebersetzt TEST.F nach TEST.B und SUB.F nach SUB.B BCF TEST.X uebersetzt TEST.X nach TEST.B Compiler Optionen ----------------- Statt -Option kann auch /Option verwendet werden. -D Debug, fasst -BVL zusammen. -B deBugcode, impliziert -H und erzeugt ausserdem Code fuer Debuggeraufrufe, zum Ueberpruefen von Feldgrenzen und Substrings. -H parcHeck, Code zum Ueberpruefen der Parameter- listen und auf Stackueberlauf erzeugen. -V Varlist: Variablenliste fuer Debugger. -L Lineslist: Zeilennummernliste fuer Debugger. -U Uppercase: Klein- in Grossbuchstaben wandeln (ausser in Characterkonstanten und Formaten). Fehlt diese Option, so sind xy, XY, Xy und xY vier verschiedene Variablen! -F Freeinput: Quellprogramm nicht im FORTRAN Format. Nichtstandart! -P Protokoll: Ausgabe der uebersetzten Zeilen. -S Kurzprotokoll: (Short) eine Zeile pro Modul mit groesse Stackframe und Code (Bytes). -O One: Nur einen Ausgabefile erzeugen, mit dem Namen des ersten Eingabefiles. Sprachumfang ------------ BC-FORTRAN77 uebersetzt den vollstaendigen Standard nach ANSI/ISO. Der Sprachstandard wird allerdings durch einige Besonderheiten verletzt (meistens werden diese als Erweiterungen bezeichnet). Ich empfehle dringend, diese Dialektkonstrukte nicht zu verwenden, da sie nicht standardisiert und damit nicht genau definiert sind. Die wichtigsten dieser Besonderheiten: INTEGER*1 8 bit INTEGER INTEGER*2 16 bit INTEGER INTEGER*4 wie INTEGER LOGICAL*1 8 bit LOGICAL LOGICAL*2 16 bit LOGICAL LOGICAL*4 wie LOGICAL IMPLICIT NONE abschalten der impliziten Typdef. COMMON /%adr/ Absoluter Common, adr ist Konstante oder einfache Variable die die Segmentadresse angibt. EQUIVALENCE() zwischen Character und anderen Typen sowie Mischen im Common. Rekursive Unterprogrammaufrufe. Namen mit max. 8 Zeichen (Standart: 6). Als wichtigste Beschraenkungen gibt es: 32kB Code+SAVE/DATA pro Unterprogramm 32kB lokale Daten pro Unterprogramm (Stackframe) 32kB pro Common (eigentlich 64kB, aber die Adresse des letzten Feldes muss <32k sein) 700 Unterprogramme pro Datei 500 Verschiedene Commons pro Datei. Daneben gibt es eine Reihe von Beschraenkungen, die bei unvernuenftig grossen Unterprogrammen zu Fehlermeldungen fuehren, meistens waere dann aber ohnehin die 32kB Code Grenze ueberschritten. Linker ------ Der Linker wird gestartet mit: BCL [-Optionen...] Datei... Enthaelt Datei keinen Punkt, so wird .B angehaengt. Die Programmdatei wird mit dem Namen der ersten Datei, aber mit .EXE statt .B, gespeichert. Es muss auch die Datei LIB.B aufgefuehrt werden, um die Standartfunktionen und die I/O-Routinen zum Programm dazu zu linken. Beispiel: BCL -S16 TEST SUB LIB oder BCL -S16 TEST.B SUB.B LIB.B Linkt die Dateien TEST.B und SUB.B und speichert unter TEST.EXE das lauffaehige Programm, das eine Stackgroesse von 16kB verwendet. Linker Optionen --------------- -Sn Stackgroesse fuer das zu erzeugende Programm wird auf n kB gesetzt (max. 64). Fehlt diese Option, so wird ein 64kB grosser Stack angenommen. Auf dem Stack werden alle lokalen Variablen/Felder einer Unterprogrammverschachtelung abgelegt. -O Optimiertes Linken: nirgends aufgerufene Unterprogramme werden weggelassen. -P Protokoll: Liste der Commonbloecke und Programmmodule. Beschraenkungen --------------- Die wichtigste Beschraenkung liegt in der RAM Groesse: die zu erzeugende Programmdatei (ohne Commons und Stack) kann maximal so gross sein, wie der groesste freie Speicherblock nach Laden von BCL. Andererseits kann, bei grossen Commons und Stack, auch ein Programm erzeugt werden, dass im vorhandenen RAM nicht gestartet werden kann. Die Anzahl Unterprogramme ist auf 3000, die Anzahl Commonbloecke auf 1500 beschraenkt. (Die laecherliche 640kB Begrenzung von MS-DOS duerfte davor greifen.) Laufzeitsystem -------------- Das Laufzeitsystem BCRTSY.EXE enthaelt Routinen, die von einem FORTRAN77 Programm benoetigt werden und muss vor dem Programmstart resident geladen sein. BCRTSY enthaelt: Arithmetikroutinen: 32 bit INTEGER Multiplikation/Division REAL Arithmetik DOUBLE PRECISION Arithmetik Es wird das IEEE Gleitkommaformat verwendet, REAL: 7 Dezimalstellen, 32 bit 1 bit Vorzeichen, 8 bit Exp., 24 bit Mantisse. DOUBLE PRECISION: 14 Dezimalstellen, 64 bit 1 bit Vorzeichen, 11 bit Exp., 52 bit Mantisse. Ein mathematischer Koprozessor wird nicht unterstuetzt. (Eine 80x87/version exisiert, kann jedoch nicht getestet werden, da ich nicht ueber entsprechende Hardware verfuege.) CHARACTER Routinen Debugger: Ein einfacher Debugger zur Fehlersuche. Nach einem Laufzeitfehler wird von ihm eine Fehlermeldung ausgegeben und Eingabe erwartet. Der Debugger kann aber auch durch Druecken einer Taste aktiviert werden, um den Programmlauf zu unterbrechen, wenn das Programm mit B-Option uebersetzt wurde. Folgende Tasten erkennt der Debugger als Kommando: T (Traceback) Rueckverfolgung des Subroutine-Call Stacks, Ausgabe der naechsthoeheren Progunit Mit Zeilennummern, falls -L Option beim Compilieren verwendet wurde. U (Untrace) Macht alle Tracebackaktionen rueckgaengig. Dies geschieht auch implizit bevor der Programmlauf fortgesetzt wird. V Variablen des aktuellen Unterprogramms mit aktuellen Inhalten, falls mit -V Option uebersetzt wurde. Bezieht sich auf auf die zuletzt angezeigte Prog.unit, falls T gedrueckt wurde. Z Programm beenden. Leertaste Weiterrechnen, falls kein Lauf- zeitfehler auftrat. S Programmschritt (bis zum naechsten Label, Unterprogramm, ELSE, ENDIF, DO). C Unterprogrammschritt (bis zum naechsten CALL oder RETURN) Bibliothek ---------- LIB.B enthaelt die mathematischen Funktionen im vollen vom Standard vorgeschriebenen Umfang. Wenn beim Linken Fehlermeldungen wie z.B. External nicht gefunden: f_SQRT auftauchen, so muss die LIB.B beim Aufruf von BCL mit angegeben werden. Programmstart ------------- Eine von BCL erzeugte Programmdatei kann wie jedes andere Programm vom Desktop oder einer Shell aus gestartet werden. Fehlermeldungen --------------- Die Fehlermeldungen von Compiler, Linker und Laufzeitsystem sollten, bis auf die folgende Ausnahme, selbsterklaerend sein. Die vollstaendige Auflistung (26 Seiten im Handbuch der Vers.P) wuerde den Rahmen dieser Beschreibung sprengen. IO-Error: Nummer Ein-/Ausgabefehler; kann abgefangen werden, indem im IO-Statement der IOSTAT= Parameter angegeben wird. Nummer ist derselbe Wert, der auch in der IOSTAT Variable zurueckgegeben wird. Nummer -1 Dateiende. -2 Dateiende inmitten eines Records. 1 Dateinummer bereits verwendet (OPEN). 2 Zu viele Dateien (OPEN). Max. 32 Dateien. 3 Dateiname zu lang (OPEN).Max. 31 Zeichen. 5 Dateinummer nicht eroeffnet. Nur die Nummern 5 und 6 koennen ohne OPEN verwendet werden. 6 Formatiert/unformatiert Widerspruch. 7 REC-Parameter fuer Datei mit ACCESS='SEQUENTIAL' 8 BACKSPACE, REWIND, ENDFILE fuer diese Datei nicht moeglich (AUX: und PRN:). 10 Internal I/O nur formatiert. 20 INTEGER Ueberlauf bei Eingabe. 21 Datenfehler bein Listengesteuerter Eingabe, z.B. fehlende Apostroph fuer Zeichenketten. 22 Unerwartetes Dateiende. 23 Record zu lang. 24 Lesefehler bei UNFORMATTED SEQUENTIAL. 30 Formatelement und I/O-Listelement passen nicht zusammen. INTEGER benoetigt ein I-Formatelement, REAL, DOUBLE PRECISION (COMPLEX) ein (zwei) F-, G-, E- oder D-Formatelemente, LOGICAL ein L-Formatelement, CHARACTER ein A-Formatelement. 31 Formatelement L: T oder F erwartet (Eingabe) 32 Formatelement I: unerwartetes Zeichen (Eingabe) Leerzeichen, Vorzeichen und Ziffern erlaubt. 33 Formatelemente E, F oder D: unerwartetes Zeichen (Eingabe). Leerzeichen, Vorzeichen, Ziffern, Dezimalpunkt, E, e, D oder d (fuer Exponent) erlaubt. 34 Zu viele ( in Format. 35 Zu viele ) in Format. 36 Ziffernfolge an unerlaubter Stelle in Format. 37 Formatelement nicht erkannt. 38 . fehlt in F, E, G oder D Formatelement. 39 4Htext oder 'text' in Format fuer READ. In FORTRAN66 konnte damit Text in ein Format hineingelesen werden; in FORTRAN77 nicht mehr erlaubt. 40 Exponent zu gross fuer gegebenes Format. 42 Formatelement zu lang. Max. Laenge des internen Recordpuffers (80 Zeichen). 43 Internal I/O, Record zu lang. 44 TL, Record zu lang. Ist ein Record laenger als der interne Recordpuffer, kann nicht mehr nach links tabuliert werden. 45 Feldlaenge 0 bei I,L,F,E,G,D Formatelement. 1000+n MS-DOS Error n 1002 Datei nicht gefunden. 1003 Directorypfad nicht gefunden. 1004 Zu viele Dateien. 1005 Zugriff nicht erlaubt. 1008 Nicht genuegend RAM frei. 1012 Zugriff nicht moeglich. 1015 Ungueltige Laufwerksbezeichnung. Probleme -------- Die 80x87 Version ist nicht getestet und wird deshalb nicht mitgeliefert. ATAN2 und DATAN2 ergibt nicht in allen Quadranten korrekte Ergebnisse. (91-02-12) Fehler aller Art sollten auf jeden Fall schriftlich gemeldet werden.